package com.spark.common.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * JSON工具类
 *
 * @author LYCHEE
 * @date 2025/3/7 11:06
 */
public class JsonUtils {

    /**
     * 将 JSON 字符串转换为 Map
     *
     * @param jsonString JSON 字符串
     * @return 转换后的 Map
     */
    public static Map<String, Object> toMap(String jsonString) {
        JSONObject jsonObject = JSON.parseObject(jsonString);
        return toMap(jsonObject);
    }

    /**
     * 将 JSONObject 转换为 Map
     *
     * @param jsonObject JSONObject 对象
     * @return 转换后的 Map
     */
    public static Map<String, Object> toMap(JSONObject jsonObject) {
        Map<String, Object> map = new HashMap<>();
        for (String key : jsonObject.keySet()) {
            Object value = jsonObject.get(key);
            if (value instanceof JSONObject) {
                map.put(key, toMap((JSONObject) value));
            } else if (value instanceof JSONArray) {
                map.put(key, toList((JSONArray) value));
            } else {
                map.put(key, value);
            }
        }
        return map;
    }

    /**
     * 将 JSONArray 转换为 List
     *
     * @param jsonArray JSONArray 对象
     * @return 转换后的 List
     */
    public static List<Object> toList(JSONArray jsonArray) {
        List<Object> list = new ArrayList<>();
        for (Object item : jsonArray) {
            if (item instanceof JSONObject) {
                list.add(toMap((JSONObject) item));
            } else if (item instanceof JSONArray) {
                list.add(toList((JSONArray) item));
            } else {
                list.add(item);
            }
        }
        return list;
    }
}
